package com.kaifamiao.service;

import com.kaifamiao.dao.RegularFileDao;
import com.kaifamiao.entity.RegularFile;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import java.util.logging.Logger;

public class FileService {

    private final Logger logger = Logger.getLogger(this.getClass().getName());

    private RegularFileDao rfDao = new RegularFileDao();

    /**
     * 根据 "原始文件名称" 和 "校验和"返回新名称
     * @param original 原始文件名
     * @param checksum 校验和
     * @return 返回新的文件名称
     */
    public String naming( String original, String checksum ){
        int index = original.lastIndexOf( '.' );
        String suffix = "";
        if( index != -1 ) {
            suffix = original.substring( index );
        }
        return checksum + suffix;
    }

    /**
     * 保存文件内容到指定位置
     * @param pathname 被保存文件的路径名称
     * @param bytes 被保存文件内容
     */
    public void store( String pathname, byte[] bytes ) {
        logger.info( "保存文件内容到服务器指定位置" );
        try {
            OutputStream out = new FileOutputStream(pathname);
            out.write(bytes, 0, bytes.length);
            out.close();
        } catch ( IOException cause ) {
            throw new RuntimeException( "文件内容保存失败", cause );
        }
    }

    /**
     * 保存文件信息到数据库中
     * @param rf 被保存文件信息
     */
    public void store(RegularFile rf){
        logger.info( "保存文件信息到数据库中" );
        rfDao.save(rf);
    }

    public List<RegularFile> loadAll(){
        return rfDao.findAll();
    }

    public RegularFile load(Integer id) {
        return rfDao.find(id);
    }

    public boolean notExists(String checksum, Integer id){
        int count = rfDao.count(checksum, id);
        return count == 0 ;
    }

    public void remove( Integer id ) {
        rfDao.delete(id);
    }

}
